<?php
require_once 'PEAR/Archive/Tar.php';

class Arm_Archive
{
    private $_archive;
    
    /**
     * Создания архива
     * 
     * @param string $archiveName имя файла архива.
     * @param null|gz|bz2 $compress
     */
    public function __construct($archiveName, $compress = null)
    {
        $this->_archive = new Archive_Tar($archiveName, $compress);
    }
    
    /**
     * Создания арихва на основе директорий.
     * 
     * @param string|array $folders перечень директорий которые нужно добавить в архиве, и кторые находятся в $dirSet
     * @param string $dirSet директория которая будет рабочей для текущего процеса создания архива
     *                       /t/other/project/ в данной директори содержатся директории которые мы хотим добавить в архив
     *                                       application/modules/default
     *                                       public/modules/default
     */
    public function addFolders($folders, $dirSet)
    {
        $dirSet  = $this->_filterFolder($dirSet);
        $folders = (array) $folders;
        $curent  = getcwd(); 
        chdir($dirSet);
        foreach ($folders as $k => $f) {
            $f = $this->_filterFolder($f);
            $f = ltrim($f, '/\\');
            $path = $dirSet . $f;
            if(is_dir($path) === false) {
                throw new Arm_Exception(Arm_Translate::_('Не существует директории которую вы ходите добавить в архив, 
                директория "%s" полный путь проверки "%s"', array($f, $path)));
            }
            $folders[$k] = $f;
        }
        $this->_archive->add($folders);
        chdir($curent);
    }
    
    public function extract($path)
    {   
        $this->_archive->extract($path);
    }

    protected function _filterFolder($folder)
    {
       $folder = rtrim($folder, '/\\') . DIRECTORY_SEPARATOR;
       return $folder;
    }
    
}